package com.symc.his.api.impl.registration;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.symc.his.api.base.BaseApiService;
import com.symc.his.api.base.BaseResponse;
import com.symc.his.api.impl.entity.PatientRegisterDO;
import com.symc.his.api.impl.mapper.PatientRegisterMapper;
import com.symc.his.api.registration.PatientRegisterService;
import com.symc.his.api.registration.dto.req.PatientRegisterReqDTO;
import com.symc.his.api.registration.dto.resp.PatientRegisterRespDTO;
import java.sql.Date;
import javax.annotation.Resource;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description:
 * @CreateTime: 2023/3/8 22:59
 * @Version:
 * @Since: 1.8
 * @Author: 辛凤文 forward.seen@foxmail.com
 */
@RestController
public class PatientRegisterServiceImpl extends BaseApiService implements PatientRegisterService {
    @Resource
    private PatientRegisterMapper patientRegisterMapper;

    @Override public BaseResponse<PatientRegisterRespDTO> testPatientRegister(Integer patientRegisterId) {
        PatientRegisterDO patientRegisterDO = new PatientRegisterDO();
        patientRegisterDO.setPatientRegisterId(patientRegisterId);
        PatientRegisterDO patientRegister = patientRegisterMapper.selectOne(new QueryWrapper<>(patientRegisterDO));
        PatientRegisterRespDTO patientRegisterRespDTO = DO2DTO(patientRegister, PatientRegisterRespDTO.class);
        return setResultSuccess(patientRegisterRespDTO);
    }

    @Override
    public BaseResponse<PatientRegisterRespDTO> addPatientRegister(PatientRegisterReqDTO patientRegisterReqDTO) {
        PatientRegisterDO patientRegister = DTO2DO(patientRegisterReqDTO, PatientRegisterDO.class);
        LambdaQueryWrapper<PatientRegisterDO> queryWrapper = new LambdaQueryWrapper<PatientRegisterDO>()
            .orderByDesc(PatientRegisterDO::getPatientRegisterId)
            .last(" LIMIT 1");
        PatientRegisterDO patientRegisterDO = patientRegisterMapper.selectOne(queryWrapper);
        Integer regNo = patientRegisterDO.getRegNo();
        patientRegister.setRegNo(++regNo);
        patientRegister.setRegTime(new Date(new java.util.Date().getTime()));
        int insertRes = patientRegisterMapper.insert(patientRegister);
        if (insertRes < 1) {
            return setResultError("插入失败！");
        }
        PatientRegisterDO patientRegisterRes = patientRegisterMapper.selectById(patientRegister.getPatientRegisterId());
        return setResultSuccess(DO2DTO(patientRegisterRes, PatientRegisterRespDTO.class));
    }

    @Override
    public BaseResponse<PatientRegisterRespDTO> queryRegisterInfoPage(Integer currentPageNum, Integer pageSize,
        PatientRegisterReqDTO patientRegisterReqDTO) {
        String patientIdPart = patientRegisterReqDTO.getPatientId();
        String patientNamePart = patientRegisterReqDTO.getPatientName();
        Page<PatientRegisterDO> page = new Page<>(currentPageNum, pageSize);
        LambdaQueryWrapper<PatientRegisterDO> queryWrapper = new LambdaQueryWrapper<PatientRegisterDO>()
            .like(!StringUtils.isEmpty(patientIdPart), PatientRegisterDO::getPatientId, patientIdPart)
            .like(!StringUtils.isEmpty(patientNamePart), PatientRegisterDO::getPatientName, patientNamePart);
        Page<PatientRegisterDO> currentPage = patientRegisterMapper.selectCurrentPage(page, queryWrapper);
        return setResultSuccess(currentPage);
    }

    @Override
    public BaseResponse<PatientRegisterRespDTO> deletePatientRegisterById(PatientRegisterReqDTO patientRegisterReqDTO) {
        Integer patientRegisterId = patientRegisterReqDTO.getPatientRegisterId();
        PatientRegisterDO patientRegisterDO = DTO2DO(patientRegisterReqDTO, PatientRegisterDO.class);
        int i = patientRegisterMapper.deleteById(patientRegisterId);
        if (i < 1) {
            setResultError("删除失败！");
        }
        return setResultSuccess("删除成功！");
    }
}